package br.com.rhinovet.faces;

import java.io.IOException;
import java.rmi.RemoteException;

import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.com.rhinoadmin.webservice.contract.ConexaoWSContract;
import br.com.rhinoadmin.webservice.contract.ConexaoWSContractProxy;
import br.com.rhinoadmin.webservice.contract.Usuario;
import br.com.rhinovet.logica.contract.PopularCadastrosLogicaContract;
import br.com.rhinovet.util.FacesUtil;


@Component
@Scope("session")
@ManagedBean(name="loginFaces")
public class LoginFaces extends FacesUtil {
	
	private static final long serialVersionUID = 1L;
	private Usuario usuario = null;
	
	@Autowired
	private PopularCadastrosLogicaContract logicaCadastros;

	private String login;
	private String senha;
	
	private boolean isPopup;
	
	public void realizarLogin() {
		
		try {
			 usuario = getConexaoWS();
		} catch (Exception e) {
		}
		
		if (usuario == null) {
			usuario = new Usuario();
			usuario.setNome("Gilson Braggion");
			usuario.setEmailInicial("gilson.braggion@gmail.com");
		}
		
		try {
			if (usuario != null) {
				getSession().setAttribute("usuarioLogado", usuario);
			}
			logicaCadastros.verificarTabelaVazia();
			
			redirecionarPagina("index.faces");
			
		} catch (Exception e) {
			adicionarMensagem("Erro ao realizar o login");
		}
	}
	
	public Usuario getConexaoWS() {
		Usuario usuario = null;
		ConexaoWSContractProxy proxy = new ConexaoWSContractProxy();
		ConexaoWSContract conexao = proxy.getConexaoWSContract();
		try {
			 usuario = conexao.realizarLogin(this.login, this.senha);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return usuario;
	}
	
	public void logout() throws IOException {
		FacesContext fc = FacesContext.getCurrentInstance();
		if (fc != null) {
			HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
			session.invalidate();
			FacesContext.getCurrentInstance().getExternalContext().redirect("login.faces");
		}
	}
	
	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public void setLogicaCadastros(PopularCadastrosLogicaContract logicaCadastros) {
		this.logicaCadastros = logicaCadastros;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public boolean isPopup() {
		return isPopup;
	}

	public void setPopup(boolean isPopup) {
		this.isPopup = isPopup;
	}
	

}